package 对象引用;

/**
 * 项目名称：Demo01
 * 类 名 称：Demo01
 * 类 描 述：TODO
 * 创建时间：2021/03/15 10:09
 * 创 建 人：XiaoCoder
 */
public class Demo01 {
    public static void main(String[] args) {
        Entity entity = new Entity();
        entity.setId(1);
        entity.setName("xiaoCoder");
        System.out.println("没有作为参数传入entity：" + entity + "  hashcode:" + entity.hashCode());
        Entity entity1 = Demo01.fun(entity);
        System.out.println("传入返回的数据：" + entity1 + "  hashcode:" + entity1.hashCode());
        System.out.println("作为参数传递的entity：" + entity + "  hashcode:" + entity.hashCode());

        /*
          结果

          没有作为参数传入entity：Entity{id=1, name='xiaoCoder'}  hashcode:1735600054
          传入返回的数据：Entity{id=2, name='xiao'}  hashcode:1735600054
          作为参数传递的entity：Entity{id=2, name='xiao'}  hashcode:1735600054

          问题：当一个对象被当作参数传递到一个方法后，此方法可改变这个对象的属性，并可返回变化后的结果，那么这里是值传递还是引用传递?
          解释：
               值传递（传递的是地址值），JAVA中的方法调用机制只能支持参数的值传递，当方法获取到这个地址值，就会在堆中去寻找这个对象
               ，然后这个方法通过引用来调用这个地址值所对应的对象并进行修改其属性，就是修改了堆中的这个传入对象中的属性，所以这个传入
               的对象的属性也会跟着修改。
         */
    }

    static Entity fun(Entity entity) {
        entity.setId(2);
        entity.setName("xiao");
        return entity;
    }
}
